Установка скрипта «Дополнительные поля для модулей»

Введение

Установка скриптового решения займет некоторое время. Пожалуйста, внимательно читайте инструкции и старайтесь следовать всем рекомендациям.

Дополнительные поля это многоцелевой инструмент, с помощью которого вы можете улучшить свой сайт оригинальными и нестандартными решениями. Часто системный лимит количества дополнительных полей у материалов для пользователей слишком мал. Из-за этого приходится реализовывать многие идеи на сайте иначе или полностью отказываться от них. uScript понимает вас и рад представить вам скрипт для решения этого вопроса.
Что скрипт может дать? К примеру, на кино-сайте у вас появится возможность указать полную информацию о фильме, его режиссере, сценаристах, актерах, годе выпуска. Если у вас сайт-журнал, дополнительные поля помогут вам перевести его на основные языки мира, таким образом значительно расширив аудиторию.

    Этот скрипт позволит вам добавить 10 дополнительных полей для материалов в следующих модулях:
  • новости сайта;
  • блог;
  • каталог файлов;
  • онлайн-игры.

    Также скрипт имеет следующие дополнительные преимущества:
  • количество новых дополнительных полей не ограничено и задаётся лично администратором сайта;
  • сортировка дополнительных полей полностью визуализирована и работает по принципу "Drag and Drop" (перетащи и брось). Вам не будет нужно что-то менять в коде скрипта, просто "захватите" блок курсом мыши и тащите в нужное место.

    Требования к установке:
  • активированное PHP;
  • использование базового API.

Автор скрипта – Новский Александр, победивший в конкурсе реализации PHP скриптов.



Перед установкой, сделайте полный бэкап шаблонов на случай, если вы в какой-то момент решите вернуть прежний вид сайту или отдельным его элементам. Сделать это можно в Панели управления » Управление дизайном » Backup шаблонов.

Первый шаг: активация API и PHP


Активация API

Для работы скрипта, нам необходимо включить возможность использования API, сделать это вы можете перейдя в Панель управления » Верхний-бар: Настройки » Общие настройки.
Почти в самом низу страницы найдите опцию "Разрешить использование API", установите напротив неё галочку, затем прокрутите страницу вниз и сохраните изменения.
Примечание: поле "API key" вы можете активировать. В этом случае система сгенерирует специальный уникальный ключ о применении которого речь пойдёт ниже. В случае, если для вас нет разницы использовать API key или не использовать его – можно оставить неактивным.


Активация PHP

Убедитесь, что на вашем сайте активна услуга PHP. Для этого перейдите на главную страницу панели управления и обратите внимание на правую часть страницы. В случае наличия активной услуги вы увидите текст "PHP детали".
– перейдите к следующему шагу установки, PHP-услуга у вас активна. Если такой текст отсутствует, значит услуга PHP отключена или просрочена. Для подключения PHP необходимо оплатить премиум пакет, включающий возможность использования PHP-скриптов, либо заказать данную услугу отдельно.

Второй шаг: загрузка скриптов на FTP PHP


Этап 1. Установка пароля

Если у вас задан пароль к FTP PHP, сразу же переходите к следующему этапу.

Перейдите на главную страницу панели управления вашим сайтом, в правой верхней части нажмите на ссылку «PHP детали».
В открывшемся окне кликните на ссылку: «Пароль не установлен».
Мы попадем на страницу установки пароля на FTP PHP. Заполните поля, продолжайте следовать инструкциям системы.

Этап 2. Подключение к PHP FTP серверу

После установки пароля, скачайте FTP-клиент, рекомендуем бесплатный FTP клиент FileZilla. После установки программы, в верхней части вводим параметры подключения:
  • Сервер: s2000.ucoz.net
  • Логин (FTP login): введите свой логин, который указан в меню "PHP детали"
  • Пароль: пароль который вы ввели ранее в специальном разделе

После заполнения полей нажмите на кнопку «Быстрое соединение».


Этап 3. Загрузка скриптов на PHP FTP сервер

После успешного подключения вы увидите каталог под именем «scripts» в правой части окна программы. Обязательно переходим в этот каталог двойным кликом по нему.

Теперь загрузите в этот каталог папку из архива со скриптом «fields». Загрузить легко, просто перетащите эту папку в правый диалог (где отображаются каталоги и файлы хранящиеся на сервере).
Узнать статус передачи файлов вы можете в окне статуса, которое находится в нижней части программы, там отображаются файлы которые ожидают передачи и те, которые не удалось передать, в частности которые были успешно переданы.

Третий шаг: загрузка файлов на сайт


Перейдите в Панель управления » Файловый менеджер.
В правом верхнем углу кликните на кнопку "Создать папку", введите название папки css.
Кликните на галочку и ура, мы создали папку с нужным именем!:) Теперь зайдите в созданную папку css и загрузите в эту папку файл "addfields.css" из архива со скриптом (папка "стили").

Четвёртый шаг: установка кода


Перейдите в шаблон «Страница материала и комментариев к нему» нужного вам модуля, и в то место, где желаете видеть вывод информации доп.полей, разместите следующий код:
<script type="text/javascript">
    $.ajax({
	type: "GET",
	url: "/php/fields/readdops.php?id=$ID$&mod=$MODULE_ID$",
	success: function(html) {
	    $("#additional_fields").empty();
	    $("#additional_fields").append(html);
	}
    });
</script><div id="additional_fields"></div>

Для модуля: новости сайта.

Перейдите в шаблон «Страница архива материалов», после системной переменной $BODY$ разместите код:
<?if($PAGE_ID$='add' || $PAGE_ID$='edit')?>
<script type='text/javascript'>
    $("#nwM22").after('<tr><td colspan="2"><div id="additional_fields"><input onclick="dopsadd()" type="button" value="Добавить поля"/></div></td></tr>');
    function dopsadd()
    {
	adres1 = location.href.split('/');
	ext1 = adres1[adres1.length - 1];
	adres2 = ext1.split('-');
	ext2 = adres2[adres2.length - 2];
	if (ext1 != 0) {
	    var idm = "?id=" + ext2 + "&mod=$MODULE_ID$";
	} else {
	    var idm = "";
	}
	$.ajax({
	    type: "GET",
	    url: "/php/fields/naredakt.php" + idm,
	    success: function(html) {
		$("#additional_fields").empty();
		$("#additional_fields").append(html);
	    }
	});
    }
    $("#addEntForm").submit(function () {
	setTimeout(function () {
	    var f = true; 
	    if (document.getElementById('chtitles')) { 
		$("div.myWinSuccess").each(function () {
		    if (this.innerHTML.indexOf("успешно") !== -1) this.innerHTML += '';
		}); 
	    }
	    $("a").each(function () {
		if (this.innerHTML.indexOf("Перейти на страницу материала") !== -1) {
		    $("div[class*='xt-close']").css("display", "none");
		    adres = this.href.split('/');
		    ext = adres[adres.length - 1];
		    ext2 = ext.split('-');
		    ext3 = ext2[ext2.length - 1];
		    var fields = $(":input[name$='mess']").serializeArray();
		    $("#serialize").empty();
		    jQuery.each(fields, function(i, field){
			$("#serialize").append(field.value);
		    });
		    if ($("#serialize").text() != 0){ 
			$.ajax({
			    url: encodeURI('/php/fields/savefiledops.php?id=' + ext3 + '&mod=$MODULE_ID$&cid=' + ext),
			    type: "POST",
			    data: $("#chtitles").serialize(),
			    timeout: 10000,
			    dataType: "json",
			    success: function (data) {
				$("#loaderphp").html(data.SCRIPTDATA);
				$("div[class*='xt-close']").css("display", "block");
			    }
			});
		    } else {
			$.post("/php/fields/deletedops.php", {
			    mod: "$MODULE_ID$",
			    id: ext3,
			    cid: ext
			}, function (data) {
			    if (data) {
				$('#loaderphp').html(data.SCRIPTDATA);
				$("div[class*='xt-close']").css("display", "block");
			    }
			}, "json")
			    }
		    f = false;
		}
	    });
	    f && setTimeout(arguments.callee, 100);
	}, 100);
    });
</script>
<?endif?>

Для модуля: блог.

Перейдите в шаблон «Страница архива материалов», после системной переменной $BODY$ разместите код:
<?if($PAGE_ID$='add' || $PAGE_ID$='edit')?>
<script type='text/javascript'>
    $("#blM22").after('<tr><td colspan="2"><div id="additional_fields"><input onclick="dopsadd()" type="button" value="Добавить поля"/></div></td></tr>');
    function dopsadd()
    {
	adres1 = location.href.split('/');
	ext1 = adres1[adres1.length - 1];
	adres2 = ext1.split('-');
	ext2 = adres2[adres2.length - 2];
	if (ext1 != 0) {
	    var idm = "?id=" + ext2 + "&mod=$MODULE_ID$";
	} else {
	    var idm = "";
	}
	$.ajax({
	    type: "GET",
	    url: "/php/fields/naredakt.php" + idm,
	    success: function(html) {
		$("#additional_fields").empty();
		$("#additional_fields").append(html);
	    }
	});
    }
    $("#addEntForm").submit(function () {
	setTimeout(function () {
	    var f = true; 
	    if (document.getElementById('chtitles')) { 
		$("div.myWinSuccess").each(function () {
		    if (this.innerHTML.indexOf("успешно") !== -1) this.innerHTML += '';
		}); 
	    }
	    $("a").each(function () {
		if (this.innerHTML.indexOf("Перейти на страницу материала") !== -1) {
		    $("div[class*='xt-close']").css("display", "none");
		    adres = this.href.split('/');
		    ext = adres[adres.length - 1];
		    ext2 = ext.split('-');
		    ext3 = ext2[ext2.length - 1];
		    var fields = $(":input[name$='mess']").serializeArray();
		    $("#serialize").empty();
		    jQuery.each(fields, function(i, field){
			$("#serialize").append(field.value);
		    });
		    if ($("#serialize").text() != 0){ 
			$.ajax({
			    url: encodeURI('/php/fields/savefiledops.php?id=' + ext3 + '&mod=$MODULE_ID$&cid=' + ext),
			    type: "POST",
			    data: $("#chtitles").serialize(),
			    timeout: 10000,
			    dataType: "json",
			    
			    success: function (data) {
				$("#loaderphp").html(data.SCRIPTDATA);
				$("div[class*='xt-close']").css("display", "block");
				
			    }
			});
		    } else {
			$.post("/php/fields/deletedops.php", {
			    mod: "$MODULE_ID$",
			    id: ext3,
			    cid: ext
			}, function (data) {
			    if (data) {
				$('#loaderphp').html(data.SCRIPTDATA);
				$("div[class*='xt-close']").css("display", "block");
			    }
			}, "json")
			    }
		    f = false;
		}
	    });
	    f && setTimeout(arguments.callee, 100);
	}, 100);
    });
</script>
<?endif?>

Для модуля: каталог файлов.

Перейдите в шаблон «Страница добавления/редактирования материала», после системной переменной $BODY$ разместите код:
<script type='text/javascript'>
    $("#ldM6").after('<tr><td colspan="2"><div id="additional_fields"><input onclick="dopsadd()" type="button" value="Добавить поля"/></div></td></tr>');
    function dopsadd()
    {
	adres1 = location.href.split('/');
	ext1 = adres1[adres1.length - 1];
	adres2 = ext1.split('-');
	ext2 = adres2[adres2.length - 2];
	if (ext1 != 0) {
	    var idm = "?id=" + ext2 + "&mod=$MODULE_ID$";
	} else {
	    var idm = "";
	}
	$.ajax({
	    type: "GET",
	    url: "/php/fields/naredakt.php" + idm,
	    success: function(html) {
		$("#additional_fields").empty();
		$("#additional_fields").append(html);
	    }
	});
    }
    $("#addEntForm").submit(function () {
	setTimeout(function () {
	    var f = true; 
	    if (document.getElementById('chtitles')) { 
		$("div.myWinSuccess").each(function () {
		    if (this.innerHTML.indexOf("успешно") !== -1) this.innerHTML += '';
		}); 
	    }
	    $("a").each(function () {
		if (this.innerHTML.indexOf("Перейти на страницу материала") !== -1) {
		    $("div[class*='xt-close']").css("display", "none");
		    adres = this.href.split('/');
		    ext = adres[adres.length - 1];
		    ext2 = ext.split('-');
		    ext3 = ext2[ext2.length - 1];
		    var fields = $(":input[name$='mess']").serializeArray();
		    $("#serialize").empty();
		    jQuery.each(fields, function(i, field){
			$("#serialize").append(field.value);
		    });
		    if ($("#serialize").text() != 0){ 
			$.ajax({
			    url: encodeURI('/php/fields/savefiledops.php?id=' + ext3 + '&mod=$MODULE_ID$&cid=' + ext),
			    type: "POST",
			    data: $("#chtitles").serialize(),
			    timeout: 10000,
			    dataType: "json",
			    success: function (data) {
				$("#loaderphp").html(data.SCRIPTDATA);
				$("div[class*='xt-close']").css("display", "block");
				
			    }
			});
		    } else {
			$.post("/php/fields/deletedops.php", {
			    mod: "$MODULE_ID$",
			    id: ext3,
			    cid: ext
			}, function (data) {
			    if (data) {
				$('#loaderphp').html(data.SCRIPTDATA);
				$("div[class*='xt-close']").css("display", "block");
			    }
			}, "json")
			    }
		    f = false;
		}
	    });
	    f && setTimeout(arguments.callee, 100);
	}, 100);
    });
</script>

Для модуля: онлайн-игры.

Перейдите в шаблон «Страница добавления/редактирования материала», после системной переменной $BODY$ разместите код:
<script type='text/javascript'>
    $(".ucoz-editor-bottom").after('<tr><td colspan="2"><div id="additional_fields"><input onclick="dopsadd()" type="button" value="Добавить поля"/></div></td></tr>');
    function dopsadd()
    {
	adres1 = location.href.split('/');
	ext1 = adres1[adres1.length - 1];
	adres2 = ext1.split('-');
	ext2 = adres2[adres2.length - 2];
	if (ext1 != 0) {
	    var idm = "?id=" + ext2 + "&mod=$MODULE_ID$";
	} else {
	    var idm = "";
	}
	$.ajax({
	    type: "GET",
	    url: "/php/fields/naredakt.php" + idm,
	    success: function(html) {
		$("#additional_fields").empty();
		$("#additional_fields").append(html);
	    }
	});
    }
    $("#addEntForm").submit(function () {
	setTimeout(function () {
	    var f = true; 
	    if (document.getElementById('chtitles')) { 
		$("div.myWinSuccess").each(function () {
		    if (this.innerHTML.indexOf("успешно") !== -1) this.innerHTML += '';
		}); 
	    }
	    $("a").each(function () {
		if (this.innerHTML.indexOf("Перейти на страницу материала") !== -1) {
		    $("div[class*='xt-close']").css("display", "none");
		    adres = this.href.split('/');
		    ext = adres[adres.length - 1];
		    ext2 = ext.split('-');
		    ext3 = ext2[ext2.length - 1];
		    var fields = $(":input[name$='mess']").serializeArray();
		    $("#serialize").empty();
		    jQuery.each(fields, function(i, field){
			$("#serialize").append(field.value);
		    });
		    if ($("#serialize").text() != 0){ 
			$.ajax({
			    url: encodeURI('/php/fields/savefiledops.php?id=' + ext3 + '&mod=$MODULE_ID$&cid=' + ext),
			    type: "POST",
			    data: $("#chtitles").serialize(),
			    timeout: 10000,
			    dataType: "json",
			    success: function (data) {
				$("#loaderphp").html(data.SCRIPTDATA);
				$("div[class*='xt-close']").css("display", "block");
			    }
			});
		    } else {
			$.post("/php/fields/deletedops.php", {
			    mod: "$MODULE_ID$",
			    id: ext3,
			    cid: ext
			}, function (data) {
			    if (data) {
				$('#loaderphp').html(data.SCRIPTDATA);
				$("div[class*='xt-close']").css("display", "block");
			    }
			}, "json")
			    }
		    f = false;
		}
	    });
	    f && setTimeout(arguments.callee, 100);
	}, 100);
    });
</script>
Далее, перейдите в шаблон «Форма добавления/редактирования материала», найдите в этом шаблоне код:
<?if($MESSAGE_FL$)?>
 <tr><td class="manTd2" colspan="2">$MESSAGE_FL$</td></tr>
 <tr><td height="10" class="manTdSep" colspan="2"><hr class="manHr" /></td></tr>
<?endif?>
и после этого кода разместите следующее:
 <tr><td class="manTd2" colspan="2"><div id="additional_fields"></div></td></tr>
 <tr><td height="10" class="manTdSep" colspan="2"><hr class="manHr" /></td></tr>

Пятый шаг: настройка и использование


Создание страниц для сортировки полей и их переменования.

Перейдите в Панель управления » Редактор страниц » Управление страницами сайта: Добавить страницу. На открывшейся странице нам нужно заполнить поля. В поле «Название страницы» введите, например, "Сортировка доп. полей". Затем в поле «Содержимое страницы» вставьте следующий код в HTML-режиме:
<select id="module">
    <option value="load">Каталог файлов</option>
    <option value="news">Новости</option>
    <option value="blog">Блог</option>
    <option value="stuff">Онлайн-игры</option>
</select>
<input type="button" onClick="mod()" value="Выбрать модуль"><div id="phpdivmain"></div>
<script type="text/javascript">
    function mod() {
	$('#phpdivmain').html('<img src="/.s/img/wd/6/ajax.gif" />');
	var moduleop = $("#module :selected").val();
	$.ajax({
	    url: "/php/fields/admindops.php",
	    type: "GET",
	    data: "mod="+moduleop,
	    timeout: 12000,
	    success: function(data){
		if (data) $('#phpdivmain').html(data);
		$.getScript("/.s/src/jquery-ui/jquery-ui.min.js", function(){
		    $( "#sortable1, #sortable2" ).sortable({
			connectWith: ".connectedSortable"
		    }).disableSelection();
		});
	    }
	});
    }
    function save () {
	var order = $("#sortable1").sortable("serialize") + '&update=update&';
	var order2 = $("#sortable2").sortable("serialize");
	var mod = $("#opred").html();
	jQuery.ajax({
	    url: "/php/fields/admindops.php?mod="+mod,
	    type: "POST",
	    data: order + order2, 
	    timeout: 12000,
	    dataType: "html",
	    success: function(data){
		if (data) $('#phpdivmain').html(data);
		$( "#sortable1, #sortable2" ).sortable({
		    connectWith: ".connectedSortable",
		    placeholder: "ui-state-highlight1"
		}).disableSelection();
		$( "#sortable1" ).sortable({ opacity: 0.6 });
	    }
	});
    }
    function addtext () {
	$("#sortable2").append('<li class="ui-state-highlight" id="name_text"><div class="ui-state-highlight3"></div><input value="text" style="width:95%" type="text" /></li>')
	    }
    function addarea () {
	$("#sortable2").append('<li class="ui-state-highlight" id="name_textarea"><div class="ui-state-highlight3"></div><textarea style="width:95%"></textarea></li>')
	    }
</script>
При этом галочка у пункта "Заменять переводы строк тегом <BR>" должна быть неактивна. Также можете отметить галочками группы, которым будет доступна эта страницы для просмотра. Однако напомним, что сохранение полей доступно только администратору (ID указывается в файле конфигурации).

Далее, по предыдущей схеме создайте страницу с названием, например, "Названия полей". Затем в поле «Содержимое страницы» вставьте следующий код в HTML-режиме:
<select id="module">
    <option value="load">Каталог файлов</option>
    <option value="news">Новости</option>
    <option value="blog">Блог</option>
    <option value="stuff">Онлайн-игры</option>
</select><input type="button" onClick="mod()" value="Перейти">
<script type="text/javascript">
    function mod() {
	$('#phpdivmain').html('<img src="/.s/img/wd/6/ajax.gif" />');
	var moduleop = $("#module :selected").val();
	jQuery.ajax({
	    url: "/php/fields/editdops.php",
	    type: "GET",
	    data: "mod=" + moduleop,
	    timeout: 12000,
	    success: function(data){
		if (data) $('#phpdivmain').html(data);
	    }
	});
    }
</script><div id="phpdivmain"></div>
Опять же, галочка у пункта "Заменять переводы строк тегом <BR>" должна быть неактивна.

Настройка скрипта.

Вся настройка и управление происходит в конфиг-файле configdops.php, который мы загружали на FTP PHP вместе с папкой «fields». Давайте рассмотрим настройки детально:

  • $site – адрес вашего сайта в пуникоде (если у вас сайт в кириллическом домене) без "http:/www." и слеша в конце. Конвертация в Punycode доступна по адресу: http://faq.ucoz.ru/punycode/
  • $site2 – если у вас сайт в кириллическом домене, то здесь указать адрес кириллическими символами, например сайт.рф
    ОДНАКО если адрес вашего сайта не с кириллическим доменом, то и в $site и в $site2 необходимо просто указать адрес сайта, например, "site.ru"
  • $adminid – ID администратора, который имеет доступ к редактированию названий доп. полей и их сортировке. Допускается указать только одного
  • $moderid – ID пользователей (модераторов), которым разрешено редактировать дополнительные поля. Перечислить через запятую, пример: 100, 200
  • $apikey – API key из админ-панели, например "335HyufTrbGe042W". Если не используете ключ, то нужно оставить поле пустым


Изменение надписей.

Если вы хотите изменить текст «Дополнительная информация», который встречается на странице материала и при добавлении\редактировании материала, откройте файлы readdops.php и naredakt.php в папке fields (которую мы загружали на FTP PHP), найдите следующее:
Дополнительная информация
и замените на нужный вам текст.

Добавление дополнительных полей.

В том случае, если вы желаете добавить ещё поля, зайдите в папку configs (которая расположена в папке fields на FTP PHP), откройте текстовой файл нужного нам модуля:
  • blog.txt – модуль "блог";
  • news.txt – модуль "новости сайта";
  • load.txt – модуль "каталог файлов";
  • stuff.txt – модуль "онлайн-игры".


Рассмотрим на примере. Имеем следующее содержание файла:
a	area1	Дополнительное поле 1	
a	text2	Дополнительное поле 2	
a	area3	Дополнительное поле 3	
a	text4	Дополнительное поле 4	
a	area5	Дополнительное поле 5	
n	area6	Дополнительное поле 6	
n	area7	Дополнительное поле 7	
n	text8	Дополнительное поле 8	
n	text9	Дополнительное поле 9	
n	text10	Дополнительное поле 10	

Добавляем следующим принципом (сохраняя при этом табуляцию):
n	area11	Дополнительное поле 11	
n	text12	Дополнительное поле 12	
n	text13	Дополнительное поле 13	
n	text14	Дополнительное поле 14	

выделенное зеленым цветом является типом расширенного поля (textarea), а красного цвета – типом обычного поля (input type="text"). Серым – ID-поля, который должен быть уникальным.

Активировать созданные поля вы можете на странице сортировки.

ВАЖНО ЗНАТЬ:
1) В дополнительных полях вызаются все html-теги. Т.е. вместо введенных "<b>Привет,</b> это я!" сохранится и отобразится только "Привет, это я!". Настоятельно не рекомендуется убирать обрезание html-тегов в целях безопасности сайта и пользоваталей.
2) Скрипт умеет сохранять текст только в одну строчку.

Установка завершена. Если у вас возникли вопросы, которые не затрагивались в документации, спрашивайте в комментариях к товару.